//
//  NSString+Extension.h
//  SeeFM
//
//  Created by CBCT_MBP on 2018/9/27.
//  Copyright © 2018年 CBCT_MBP. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSString (Extension)

#pragma mark - 正则匹配
/**
 转换为银行卡显示格式（首尾四位显示，中间各位*号代替）
 
 @param string 需要显示的符号
 */
- (NSString *)stringByConverttoBankCardFormatWithString:(NSString *)string;

/**
 转换为电话号码显示格式（344格式，138 2345 6789）
 
 @param string 需要转换格式的字符串
 */
- (NSString *)stringByConverttoPhoneNumberFormatWithString:(NSString *)string;

/**
 正则匹配（只支持中英文）
 */
- (BOOL)isMatchChineseAndEnglish;

/**
 正则匹配（只支持中文）
 */
- (BOOL )isMatchChinese;

/**
 正则匹配（字母数字中文及其（!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~）空格 。，！（）、）
 */
- (BOOL)isMatchChineseAndEnglishAndNumberAndCharacter;

/**
 正则匹配（只支持中英文 + 括号（中英文 + 全角 + 半角））
 
 @param isWithPracket 是否校验括号
 */
- (BOOL)isMatchChineseAndEnglishWithPracket:(BOOL)isWithPracket;

/**
 正则匹配（只支持纯数字 16-19位 首位可以为0）
 */
- (BOOL)isMatchBankCard;

/**
 正则匹配（邮箱“email”）
 */
- (BOOL)isMatchEmail;

/**
 正则匹配（正整数）
 */
- (BOOL)isMatchUinteger;

/**
 正则匹配（中文、数字、字母、支持的特殊字符：!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 空格 。，！（）、 ，？）
 */
- (BOOL)isMatchChineseEnglishNumberWithCustomCharacter;

/**
 正则匹配（身份证号码）
 */
- (BOOL)isMatchIdcard;

/**
 正则匹配（电话号码）
 */
- (BOOL)isValidateMobile;

#pragma mark - 字符串MD5加密
/**
 字符串MD5加密
 */
+ (NSString *)md5HexDigest:(NSString*)input;

#pragma mark - 计算rect
/**
 根据字体大小以及允许的范围返回字符串的rect
 
 @param font 字体大小
 @param size 允许的size
 @return 返回字符串所占据的size
 */
- (CGSize)stringWithFont:(UIFont *)font size:(CGSize)size;

/**
 根据字体大小以及允许的范围返回字符串的rect
 
 @param font 字体大小
 @param size 尺寸
 @param lineSpacing 行间距
 */
- (CGSize)stringWithFont:(UIFont *)font size:(CGSize)size lineSpacing:(CGFloat)lineSpacing;


- (NSString *)addParameters:(NSDictionary *)parameters;


/**
 匹配多个相同字符串,并返回rangeValue的数组
 @param         subString 匹配子字符串
 @return        返回ranges
 */
- (NSArray *)rangesOfSubString:(NSString *)subStr;

/**
 直接传入精度丢失有问题的Double类型
 */
-(NSString *)reviseString;

- (NSArray *)emo_emojiRanges;

/**
 Calculate if the string has any emoji.
 
 @return YES if the string has emojis, No otherwise.
 */
- (BOOL)emo_containsEmoji;

/**
 Calculate if the string consists entirely of emoji.
 
 @return YES if the string consists entirely of emoji, No otherwise.
 */
- (BOOL)emo_isPureEmojiString;

/**
 Calculate number of emojis on the string.
 
 @return the total number of emojis.
 */
- (NSInteger)emo_emojiCount;


/**
 remove all the emojis in the string.
 
 @return self without emojis;
 */
- (instancetype)removedEmojiString;


/**
 the string is emoji or not
 
 @return YES if the string is emoji, NO otherwise.
 */
- (BOOL)isEmoji;


/**
 Calculate the length of the string.
 输入内容位数  英文为1  汉字为2  表情为2
 eg.  懂得ssd[/cry/] = 2*2 + 3 + 1*2 = 9
 上面的字符串 @"懂得ssd[/cry/]" 两个汉字+三个英文字母+一个emoji表情 = 9位
 表示一共输入了9个  个数限制用
 陌陌里昵称的限制 24个英文字母或者12个汉字或者12个表情  总位数 <= 24
 @return string count
 */

- (int)totalCount;
- (NSUInteger)totalCountExceptEmoji;   //汉字1  数字英文2   表情就按系统的算

-(NSUInteger)getLength;

- (NSUInteger)charactorNumber;

- (NSUInteger)charactorNumberWithEncoding:(NSStringEncoding)encoding;

- (NSUInteger)charactorNumberForChineseSpecial;

/* 过滤换行后的 */
- (NSString *)linefeedString;

/** url后拼接参数 */
- (NSString *)urlAddCompnentForValue:(NSString *)value key:(NSString *)key;

/** 金额格式化 */
+ (NSString *)stringChangeMoneyWithStr:(NSString *)str numberStyle:(NSNumberFormatterStyle)numberStyle;

- (BOOL)isValidIP;
@end

NS_ASSUME_NONNULL_END
